﻿using Abp.Application.Services;
using System.Threading.Tasks;
using FutureApp.Shop.Dto;
using Abp.Application.Services.Dto;
using System;

namespace FutureApp.Shop
{
    /// <summary>
    /// 商品特征属性应用服务
    /// </summary>
    public interface IGoodsAttributeAppService : IApplicationService
    {
        /// <summary>
        /// 获取商品特征属性列表
        /// </summary>
        /// <returns>返回商品特征属性列表</returns>
        Task<ListResultDto<GoodsAttributeEntityDto>> GetGoodsAttributeList();

        /// <summary>
        /// 获取商品特征属性列表
        /// </summary>
        /// <param name="input">参数</param>
        /// <returns>返回商品特征属性列表</returns>
        ListResultDto<GoodsAttributeEntityDto> GetGoodsAttributeList(GetGoodsAttributeListInput input);

        /// <summary>
        /// 获取商品特征属性
        /// </summary>
        /// <param name="id">商品特征属性Id</param>
        /// <returns>返回商品特征属性</returns>
        Task<GoodsAttributeEntityDto> GetGoodsAttribute(Guid id);

        /// <summary>
        /// 获取商品特征属性
        /// </summary>
        /// <param name="name">商品特征属性名称</param>
        /// <returns>返回商品特征属性</returns>
        Task<GoodsAttributeEntityDto> GetGoodsAttribute(string name);

        /// <summary>
        /// 是否存在商品特征属性
        /// </summary>
        /// <param name="id">商品特征属性Id</param>
        /// <returns>存在返回<c>true</c>，不存在返回<c>false</c></returns>
        Task<bool> ExistGoodsAttribute(Guid id);

        /// <summary>
        /// 是否存在商品特征属性
        /// </summary>
        /// <param name="name">商品特征属性名称</param>
        /// <returns>存在返回<c>true</c>，不存在返回<c>false</c></returns>
        Task<bool> ExistGoodsAttribute(string name);

        /// <summary>
        /// 删除商品特征属性
        /// </summary>
        /// <param name="id">商品特征属性Id</param>
        Task DeleteGoodsAttribute(Guid id);

        /// <summary>
        /// 创建商品特征属性
        /// </summary>
        /// <param name="input">参数</param>
        Task CreateGoodsAttribute(CreateGoodsAttributeInput input);

        /// <summary>
        /// 定义商品特征属性值
        /// </summary>
        /// <param name="input">参数</param>
        Task DefineGoodsAttributeValue(DefineGoodsAttributeValueInput input);
    }
}
